{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5c2fc317",
   "metadata": {},
   "source": [
    "**IIR 滤波器设计**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5fadffc",
   "metadata": {},
   "source": [
    "#### IIR 与 FIR 滤波器的比较"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f7aeb08",
   "metadata": {},
   "source": [
    "与FIR滤波器相比，IIR滤波器的主要优点是，要满足同一组设定，它的滤波器阶数通常远远低于FIR滤波器。虽然IIR滤波器具有非线性相位，但数据处理通常是“离线”执行的，即整个数据序列在滤波之前是可用的。这可以采用非因果零相位滤波方法（通过`filtfilt`函数），消除IIR滤波器的非线性相位失真。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7fab50e9",
   "metadata": {},
   "source": [
    "#### 经典 IIR 滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85b117ee",
   "metadata": {},
   "source": [
    "经典的IIR滤波器、Butterworth滤波器、Chebyshev I类和II类滤波器、椭圆滤波器和Bessel滤波器都以不同的方式逼近理想的矩形滤波器。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ccde7d9",
   "metadata": {},
   "source": [
    "您可在模拟域和数字域以及低通、高通、带通和带阻配置中创建所有上述类型的经典IIR滤波器（Bessel滤波器除外，因为它仅支持模拟情况）。对于大多数滤波器类型，您还可以在通带和阻带衰减以及过渡宽度方面找到符合给定滤波器设定的最低滤波器阶数。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89a1d02e",
   "metadata": {},
   "source": [
    "#### IIR 滤波器方法概述"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1157b678",
   "metadata": {},
   "source": [
    "下表总结了工具箱中的各种滤波器方法，并列出Matlab和Python可用于实现这些方法的函数。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ea5955f",
   "metadata": {},
   "source": [
    "<table align=\"center\">\n",
    "\t<tr align=\"center\">\n",
    "\t    <th>滤波器方法</th>\n",
    "\t    <th>说明</th>\n",
    "       <th>Matlab滤波器函数</th>\n",
    "\t    <th>Python滤波器函数</th>  \n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td rowspan=\"10\">模拟原型</td>\n",
    "\t    <td rowspan=\"10\">利用经典低通原型滤波器在连续（拉普拉斯）域中的极点和零点，通过频率变换和滤波器离散化获得数字滤波器。</td>\n",
    "       <td colspan=\"2\">整体设计函数：</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>besself, butter, cheby1, cheby2, ellip</td>\n",
    "\t    <td>bessel, butter, cheby1, cheby2, ellip</td>\n",
    "\t</tr>\n",
    "\t<tr>\n",
    "\t    <td colspan=\"2\">阶估算函数：</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "       <td>buttord, cheb1ord, cheb2ord, ellipord</td>\n",
    "       <td>buttord, cheb1ord, cheb2ord, ellipord</td>\n",
    "\t</tr>\n",
    "\t<tr>\n",
    "\t    <td colspan=\"2\">低通模拟原型函数：</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "       <td>besselap, buttap, cheb1ap, cheb2ap, ellipap</td>\n",
    "       <td>besselap, buttap, cheb1ap, cheb2ap, ellipap</td>\n",
    "\t</tr>\n",
    "\t<tr>\n",
    "\t    <td colspan=\"2\">频率变换函数：</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "       <td>lp2bp, lp2bs, lp2hp, lp2lp</td>\n",
    "       <td>lp2bp, lp2bs, lp2hp, lp2lp</td>\n",
    "\t</tr>\n",
    "\t<tr>\n",
    "\t    <td colspan=\"2\">滤波器离散化函数：</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "       <td>bilinear, impinvar</td>\n",
    "       <td>bilinear, 无</td>\n",
    "\t</tr>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4dfea80",
   "metadata": {},
   "source": [
    "#### 使用模拟原型的经典 IIR 滤波器设计"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa030377",
   "metadata": {},
   "source": [
    "下面的IIR数字滤波器设计方法基于将经典低通模拟滤波器转换为其等效的数字滤波器。以下各节说明如何设计滤波器，并总结了支持的滤波器类型的特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "681419bb",
   "metadata": {},
   "source": [
    "1. 完成经典IIR滤波器设计"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "839fa949",
   "metadata": {},
   "source": [
    "使用滤波器设计函数，您可以轻松创建具有低通、高通、带通或带阻配置的任意阶滤波器。下面是滤波器设计函数一览表。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbd58e53",
   "metadata": {},
   "source": [
    "<table align=\"center\">\n",
    "\t<tr align=\"center\">\n",
    "\t    <th>滤波器类型</th>\n",
    "\t    <th>Matlab设计函数</th>\n",
    "       <th>Python设计函数</th>  \n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td rowspan=\"3\">Bessel（仅模拟）</td>\n",
    "\t    <td>[b,a] = besself(n,Wn,options)</td>\n",
    "       <td>b,a = signal.bessel(n,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[z,p,k] = besself(n,Wn,options)</td>\n",
    "\t    <td>z,p,k = signal.bessel(n,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[A,B,C,D] = besself(n,Wn,options)</td>\n",
    "\t    <td>sos = signal.bessel(n,Wn,options)</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td rowspan=\"3\">Butterworth</td>\n",
    "\t    <td>[b,a] = butter(n,Wn,options)</td>\n",
    "       <td>b,a = signal.butter(n,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[z,p,k] = butter(n,Wn,options)</td>\n",
    "\t    <td>z,p,k = signal.butter(n,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[A,B,C,D] = butter(n,Wn,options)</td>\n",
    "\t    <td>sos = signal.butter(n,Wn,options)</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td rowspan=\"3\">Chebyshev I 类</td>\n",
    "\t    <td>[b,a] = cheby1(n,Rp,Wn,options)</td>\n",
    "       <td>b,a = signal.cheby1(n,rp,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[z,p,k] = cheby1(n,Rp,Wn,options)</td>\n",
    "\t    <td>z,p,k = signal.cheby1(n,rp,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[A,B,C,D] = cheby1(n,Rp,Wn,options)</td>\n",
    "\t    <td>sos = signal.cheby1(n,rp,Wn,options)</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td rowspan=\"3\">Chebyshev II 类</td>\n",
    "\t    <td>[b,a] = cheby2(n,Rs,Wn,options)</td>\n",
    "       <td>b,a = signal.cheby2(n,rs,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[z,p,k] = cheby2(n,Rs,Wn,options)</td>\n",
    "\t    <td>z,p,k = signal.cheby2(n,rs,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[A,B,C,D] = cheby2(n,Rs,Wn,options)</td>\n",
    "\t    <td>sos = signal.cheby2(n,rs,Wn,options)</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td rowspan=\"3\">椭圆</td>\n",
    "\t    <td>[b,a] = ellip(n,Rp,Rs,Wn,options)</td>\n",
    "       <td>b,a = signal.ellip(n,rp,rs,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[z,p,k] = ellip(n,Rp,Rs,Wn,options)</td>\n",
    "\t    <td>z,p,k = signal.ellip(n,rp,rs,Wn,options)</td>\n",
    "\t</tr>\n",
    "\t<tr >\n",
    "\t    <td>[A,B,C,D] = ellip(n,Rp,Rs,Wn,options)</td>\n",
    "\t    <td>sos = signal.ellip(n,rp,rs,Wn,options)</td>\n",
    "\t</tr>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf629dae",
   "metadata": {},
   "source": [
    "默认情况下，这些函数都返回低通滤波器；您只需指定所需的截止频率Wn，以归一化单位表示（使Nyquist频率为 1 Hz）。要获得高通滤波器，请将`'high'`附加到函数的参数列表中。要获得带通或带阻滤波器，请将Wn指定为包含通带边缘频率的二元素向量。为带阻配置追加`'stop'`。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d5e6d63",
   "metadata": {},
   "source": [
    "以下是一些数字滤波器示例："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8ab7792a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from scipy import signal\n",
    "\n",
    "b,a = signal.butter(5,0.4)\n",
    "b,a = signal.cheby1(4,1,np.array([0.4,0.7]),'bandpass')\n",
    "b,a = signal.cheby2(6,60,0.8,'highpass')\n",
    "b,a = signal.ellip(3,1,60,np.array([0.4,0.7]),'bandstop')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1989819",
   "metadata": {},
   "source": [
    "要设计一个模拟滤波器（可能是出于仿真需要），对于Matlab，请在尾部添加参数`'s'`；对于Python，请将`'analog'`指定为`'True'`。以弧度/秒为单位指定截止频率："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "0fa7d71d",
   "metadata": {},
   "outputs": [],
   "source": [
    "b,a = signal.butter(5,0.4,analog=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8194e8d",
   "metadata": {},
   "source": [
    "所有滤波器设计函数都会返回一个以传递函数、零极点增益或状态空间线性系统模型形式表示的滤波器，具体形式取决于存在多少输出参数。一般情况下，您应该避免使用传递函数形式，因为可能会发生舍入误差导致的数值问题。更好的做法是使用零极点增益形式，您可以使用`zp2sos`将其转换为二阶节 (sos) 形式，然后使用sos形式来分析或实现您的滤波器。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4dbb2b98",
   "metadata": {},
   "source": [
    "**注意**：所有经典的 IIR 低通滤波器都不适用于极低的截止频率。因此，与其设计通带非常窄的低通 IIR 滤波器，不如设计更宽的通带并抽取输入信号。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a16ce98d",
   "metadata": {},
   "source": [
    "2. 按照频域设定设计 IIR 滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc54226b",
   "metadata": {},
   "source": [
    "下面的函数提供阶选择函数，用于计算满足一组给定要求的最小滤波器阶。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1c05d0f7",
   "metadata": {},
   "source": [
    "<table align=\"center\">\n",
    "\t<tr align=\"center\">\n",
    "\t    <th>滤波器类型</th>\n",
    "\t    <th>Matlab阶估计函数</th>\n",
    "       <th>Python阶估计函数</th>  \n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td>Butterworth</td>\n",
    "\t    <td>[n,Wn] = buttord(Wp,Ws,Rp,Rs)</td>\n",
    "       <td>ord,wn = signal.buttord(wp,ws,gpass,gstop,options)</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td>Chebyshev I 类</td>\n",
    "\t    <td>[n,Wn] = cheb1ord(Wp,Ws,Rp,Rs)</td>\n",
    "       <td>ord,wn = signal.cheb1ord(wp,ws,gpass,gstop,options)</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td>Chebyshev II 类</td>\n",
    "\t    <td>[n,Wn] = cheb2ord(Wp,Ws,Rp,Rs)</td>\n",
    "       <td>ord,wn = signal.cheb2ord(wp,ws,gpass,gstop,options)</td>\n",
    "\t</tr>\n",
    "   <tr>\n",
    "\t    <td>椭圆</td>\n",
    "\t    <td>[n,Wn] = ellipord(Wp,Ws,Rp,Rs)</td>\n",
    "       <td>ord,wn = signal.ellipord(wp,ws,gpass,gstop,options)</td>\n",
    "\t</tr>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51ae2669",
   "metadata": {},
   "source": [
    "它们与滤波器设计函数结合使用时非常有用。假设您需要一个具有以下设定的带通滤波器：通带为1000至2000 Hz，阻带从通带两侧外500 Hz处开始，采样频率为10 kHz，通带波纹至多1 dB，阻带衰减至少60 dB。您可以通过使用以下butter函数来满足这些设定。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bf2ce361",
   "metadata": {},
   "outputs": [],
   "source": [
    "n,wn = (signal.buttord(np.array([1000,2000])/5000,\n",
    "np.array([500,2500])/5000,1,60,'bandpass'))\n",
    "b,a = signal.butter(n,wn,'bandpass')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e4f11f8",
   "metadata": {},
   "source": [
    "输出结果为："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8b343034",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n = 15\n",
      "wn = [0.19695993 0.40617398]\n"
     ]
    }
   ],
   "source": [
    "print('n = %d' %n);print('wn = {}'.format(wn))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30efb201",
   "metadata": {},
   "source": [
    "满足相同要求的椭圆滤波器由下式给出"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d9941963",
   "metadata": {},
   "outputs": [],
   "source": [
    "n,wn = (signal.ellipord(np.array([1000,2000])/5000,\n",
    "np.array([500,2500])/5000,1,60,'bandpass'))\n",
    "b,a = signal.ellip(n,1,60,wn,'bandpass')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f3d5e2d",
   "metadata": {},
   "source": [
    "输出结果为："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5ee0a227",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n = 5\n",
      "wn = [0.2 0.4]\n"
     ]
    }
   ],
   "source": [
    "print('n = %d' %n);print('wn = {}'.format(wn))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a12169c3",
   "metadata": {},
   "source": [
    "这些函数也适用于其他标准频带配置以及模拟滤波器。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "511d2b7d",
   "metadata": {},
   "source": [
    "#### 经典 IIR 滤波器类型的比较"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf11d23b",
   "metadata": {},
   "source": [
    "以下五种不同类型的经典 IIR 滤波器，它们各有所长。本部分显示每种滤波器的基本模拟原型形式，并总结了主要特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfc7fd05",
   "metadata": {},
   "source": [
    "1. Butterworth滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ffacb3b5",
   "metadata": {},
   "source": [
    "Butterworth滤波器提供理想低通滤波器在模拟频率$\\omega=0$和$\\omega=\\infty$处的响应的最佳泰勒级数逼近；对于任意阶N，幅值平方响应在这两个位置的2N–1阶导数为零（即在$\\omega=0$和$\\omega=\\infty$处达到最大平坦）。总体而言，响应呈单调形态，从$\\omega=0$和$\\omega=\\infty$平稳下降。在$\\omega=1$处，$|H(j\\omega)|=1/\\sqrt{2}$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2406990f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "z,p,k = signal.buttap(5)\n",
    "w,h = signal.freqs_zpk(z,p,k,np.logspace(-1,1,1000))\n",
    "fig,ax = plt.subplots();\n",
    "ax.semilogx(w,np.abs(h));ax.grid(which='both')\n",
    "ax.set_xlabel('Frequency (rad/s)')\n",
    "ax.set_ylabel('Magnitude')\n",
    "ax.autoscale(tight=True)\n",
    "fig.savefig('./program1.png',dpi=500)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6ae2921",
   "metadata": {},
   "source": [
    "2. Chebyshev I类滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af9365b9",
   "metadata": {},
   "source": [
    "Chebyshev I类滤波器通过在通带中引入$R_p$dB的等波纹，将整个通带的理想和实际频率响应之间的绝对差降至最低。其阻带响应达到最大平坦度。从通带到阻带的过渡比Butterworth滤波器更快。在$\\omega=1$处，$|H(j\\omega)|=10^{-R_p/{20}}$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e6d55e61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z,p,k = signal.cheb1ap(5,0.5)\n",
    "w,h = signal.freqs_zpk(z,p,k,np.logspace(-1,1,1000))\n",
    "fig,ax = plt.subplots();\n",
    "ax.semilogx(w,np.abs(h));ax.grid(which='both')\n",
    "ax.set_xlabel('Frequency (rad/s)')\n",
    "ax.set_ylabel('Magnitude')\n",
    "ax.autoscale(tight=True)\n",
    "fig.savefig('./program2.png',dpi=500)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d2b5ac4",
   "metadata": {},
   "source": [
    "3. Chebyshev II类滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "808c8a83",
   "metadata": {},
   "source": [
    "Chebyshev II类滤波器通过在阻带中加入R_sdB的等波纹，将整个阻带的理想频率响应和实际频率响应之间的绝对差降至最低。其通带响应达到最大平坦度。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7f18549f",
   "metadata": {},
   "source": [
    "阻带不像I类滤波器那样快地逼近零（对于偶数滤波器阶N则根本不会逼近零）。然而，通带中没有波纹通常是重要优势。在$\\omega=1$处，$|H(j\\omega)|=10^{-R_s/{20}}$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "42008d81",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z,p,k = signal.cheb2ap(5,20)\n",
    "w,h = signal.freqs_zpk(z,p,k,np.logspace(-1,1,1000))\n",
    "fig,ax = plt.subplots();\n",
    "ax.semilogx(w,np.abs(h));ax.grid(which='both')\n",
    "ax.set_xlabel('Frequency (rad/s)')\n",
    "ax.set_ylabel('Magnitude')\n",
    "ax.autoscale(tight=True)\n",
    "fig.savefig('./program3.png',dpi=500)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86e91d00",
   "metadata": {},
   "source": [
    "4. 椭圆滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24d052af",
   "metadata": {},
   "source": [
    "椭圆滤波器在通带和阻带中均采用等波纹。它们通常以任何支持的滤波器类型中的最低阶满足滤波器要求。在给定滤波器阶数N、以分贝为单位的通带波纹$R_p$、以分贝为单位的阻带波纹$R_s$的情况下，椭圆滤波器可以最小化过渡宽度。在$\\omega=1$处，$|H(j\\omega)|=10^{-R_p/{20}}$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "648a134d",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z,p,k = signal.ellipap(5,0.5,20)\n",
    "w,h = signal.freqs_zpk(z,p,k,np.logspace(-1,1,1000))\n",
    "fig,ax = plt.subplots();\n",
    "ax.semilogx(w,np.abs(h));ax.grid(which='both')\n",
    "ax.set_xlabel('Frequency (rad/s)')\n",
    "ax.set_ylabel('Magnitude')\n",
    "ax.autoscale(tight=True)\n",
    "fig.savefig('./program4.png',dpi=500)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3c4766c9",
   "metadata": {},
   "source": [
    "5. Bessel 滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4fa0a36b",
   "metadata": {},
   "source": [
    "模拟Bessel低通滤波器在零频率处具有最大平坦度的群延迟，并且在整个通带内保持几乎恒定的群延迟。因此，滤波后的信号在通带频率范围内保持其波形。当模拟Bessel低通滤波器通过频率映射转换为数字滤波器时，它不再具有这种最大平坦属性。Signal Processing Toolbox™仅支持使用完整Bessel设计函数实现模拟滤波器。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd30eb1d",
   "metadata": {},
   "source": [
    "相比其他滤波器，Bessel 滤波器通常需要更高的阶数才能获得理想的阻带衰减。在$\\omega=1$处，$|H(j\\omega)|<1/\\sqrt{2}$，并且会随着滤波器阶数 n 的增大而减小。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "44f47d4a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z,p,k = signal.besselap(5)\n",
    "w,h = signal.freqs_zpk(z,p,k,np.logspace(-1,1,1000))\n",
    "fig,ax = plt.subplots();\n",
    "ax.semilogx(w,np.abs(h));ax.grid(which='both')\n",
    "ax.set_xlabel('Frequency (rad/s)')\n",
    "ax.set_ylabel('Magnitude')\n",
    "ax.autoscale(tight=True)\n",
    "fig.savefig('./program5.png',dpi=500)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5517d44b",
   "metadata": {},
   "source": [
    "**注意**：上面显示的低通滤波器是用模拟原型函数 besselap、buttap、cheb1ap、cheb2ap 和 ellipap 创建的。这些函数求截止频率为 1 弧度/秒的适当类型的 n 阶模拟滤波器的零点、极点和增益。滤波器整体设计函数（bessel、butter、cheby1、cheby2 和 ellip）将调用原型函数作为设计过程的第一步"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
